knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE, fig.align='center', cache=TRUE,
autodep = TRUE)
options(mc.cores = parallel::detectCores())
source("./source/read_data.R")
pal = brewer.pal(11, "RdBu")[c(2,4,11,10)]
summary(mn$P1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.2440 0.6393 0.9547 1.1701 1.3862 6.9291
summary(whole_cc$P1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.2440 0.6261 0.9206 1.2289 1.4288 10.0907
We removed two outliers for the main analysis.
# whole_cc = complete cases
# This is the model with outliers included
mod = lm(WISC ~ P1 + SEX*P1 + SEX + M_IQ + ALCOHOL + M_EDU + M_AGE +
MARITAL_STATUS + HOME_SCORE + mat_hard
, data = whole_cc)
summary(mod)
##
## Call:
## lm(formula = WISC ~ P1 + SEX * P1 + SEX + M_IQ + ALCOHOL + M_EDU +
## M_AGE + MARITAL_STATUS + HOME_SCORE + mat_hard, data = whole_cc)
##
## Residuals:
## Min 1Q Median 3Q Max
## -43.649 -8.209 0.684 8.871 28.071
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 101.35681 2.06312 49.128 < 0.0000000000000002
## P1 -0.32796 1.04128 -0.315 0.753029
## SEXFemales -1.79678 2.28932 -0.785 0.433208
## M_IQ 3.05885 0.80976 3.777 0.000194
## ALCOHOLYes -5.78965 1.70620 -3.393 0.000791
## M_EDU< High school degree -1.10596 1.65639 -0.668 0.504883
## M_AGE 1.20347 0.84861 1.418 0.157266
## MARITAL_STATUSEver Married -0.02059 1.70476 -0.012 0.990370
## HOME_SCORE 2.50284 0.76826 3.258 0.001262
## mat_hardYes -2.23735 1.53031 -1.462 0.144864
## P1:SEXFemales -0.15397 1.40791 -0.109 0.912998
##
## (Intercept) ***
## P1
## SEXFemales
## M_IQ ***
## ALCOHOLYes ***
## M_EDU< High school degree
## M_AGE
## MARITAL_STATUSEver Married
## HOME_SCORE **
## mat_hardYes
## P1:SEXFemales
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12.45 on 278 degrees of freedom
## Multiple R-squared: 0.164, Adjusted R-squared: 0.134
## F-statistic: 5.455 on 10 and 278 DF, p-value: 0.0000002148
plot(mod)
# Individual 272 influential based on Cooks distance, residual vs. leverage plot
ols_plot_cooksd_chart(mod)
ols_plot_resid_lev(mod)
# get rid of highest
whole_m1 = whole_cc[-which.max(whole_cc$P1),]
mod2 = lm(WISC ~ P1 + SEX*P1 + SEX + SEX + M_IQ + ALCOHOL + M_EDU + M_AGE +
MARITAL_STATUS + HOME_SCORE + mat_hard
, data = whole_m1)
summary(mod2)
##
## Call:
## lm(formula = WISC ~ P1 + SEX * P1 + SEX + SEX + M_IQ + ALCOHOL +
## M_EDU + M_AGE + MARITAL_STATUS + HOME_SCORE + mat_hard, data = whole_m1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -43.703 -8.060 0.495 9.058 28.178
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 101.7238 2.0647 49.268 < 0.0000000000000002 ***
## P1 -0.3697 1.0373 -0.356 0.721795
## SEXFemales -0.2522 2.4346 -0.104 0.917572
## M_IQ 3.0265 0.8067 3.752 0.000214 ***
## ALCOHOLYes -5.6243 1.7017 -3.305 0.001075 **
## M_EDU< High school degree -1.3949 1.6574 -0.842 0.400716
## M_AGE 1.2085 0.8452 1.430 0.153885
## MARITAL_STATUSEver Married -0.3311 1.7065 -0.194 0.846292
## HOME_SCORE 2.3739 0.7684 3.089 0.002210 **
## mat_hardYes -2.5732 1.5354 -1.676 0.094870 .
## P1:SEXFemales -1.6121 1.6173 -0.997 0.319735
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12.4 on 277 degrees of freedom
## Multiple R-squared: 0.1698, Adjusted R-squared: 0.1398
## F-statistic: 5.666 on 10 and 277 DF, p-value: 0.0000001013
plot(mod2)
# cooks dist for 264
ols_plot_cooksd_chart(mod2)
ols_plot_resid_lev(mod2)
# Individual 264 influential based on Cooks distance, residual vs. leverage plot
grubbs.test(log(whole_cc$P1)) # highest values is an outlier
##
## Grubbs test for one outlier
##
## data: log(whole_cc$P1)
## G = 3.77043, U = 0.95047, p-value = 0.01967
## alternative hypothesis: highest value 2.31161455316489 is an outlier
grubbs.test(log(whole_m1$P1))
##
## Grubbs test for one outlier
##
## data: log(whole_m1$P1)
## G = 3.30028, U = 0.96192, p-value = 0.1253
## alternative hypothesis: highest value 1.96633990278861 is an outlier
# Fit the gam to whole data including outliers
fit_sense <- gam(WISC ~ s(P1, by = SEX) + SEX + M_IQ + ALCOHOL + M_EDU +
MARITAL_STATUS + HOME_SCORE + M_AGE + mat_hard,
data = whole_cc)
summary(fit_sense)
##
## Family: gaussian
## Link function: identity
##
## Formula:
## WISC ~ s(P1, by = SEX) + SEX + M_IQ + ALCOHOL + M_EDU + MARITAL_STATUS +
## HOME_SCORE + M_AGE + mat_hard
##
## Parametric coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 101.1042 1.5253 66.287 < 0.0000000000000002 ***
## SEXFemales -2.0798 1.4726 -1.412 0.158972
## M_IQ 3.0734 0.8048 3.819 0.000165 ***
## ALCOHOLYes -5.5515 1.7010 -3.264 0.001238 **
## M_EDU< High school degree -1.2601 1.6480 -0.765 0.445157
## MARITAL_STATUSEver Married -0.1544 1.6958 -0.091 0.927513
## HOME_SCORE 2.3730 0.7668 3.095 0.002173 **
## M_AGE 1.1344 0.8440 1.344 0.180036
## mat_hardYes -2.4887 1.5263 -1.631 0.104116
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Approximate significance of smooth terms:
## edf Ref.df F p-value
## s(P1):SEXMales 1.000 1.000 0.117 0.733
## s(P1):SEXFemales 1.978 2.433 1.344 0.216
##
## R-sq.(adj) = 0.146 Deviance explained = 17.8%
## GCV = 159.61 Scale est. = 153 n = 289
# get predicted values
pred = as.data.frame(predict.gam(fit_sense, se.fit = T, type="terms"))
# Create a dataframe to predict for females
const = tibble(P1 = seq(min(whole_cc$P1), max(whole_cc$P1), length=289)) %>%
mutate(SEX = "Females",
M_IQ = 0,
ALCOHOL = as_factor("No"),
M_EDU = "≥ High school degree or equivalent",
M_AGE = 0,
mat_hard = "No",
MARITAL_STATUS = "Never Married",
HOME_SCORE = 0)
pred_f = as.data.frame(predict.gam(fit_sense, newdata = const, se.fit = T, type="terms"))
# This gets smooth CI for females
sense_f = as_tibble(pred_f) %>%
bind_cols(., const) %>%
dplyr::select(grep("(SEX|P1)", names(.))) %>%
mutate(predIQ = mean(whole_cc$WISC) + fit.SEX + fit.s.P1..SEXMales + fit.s.P1..SEXFemales,
se= se.fit.SEX + se.fit.s.P1..SEXMales + se.fit.s.P1..SEXFemales,
lci = predIQ - 1.96*se,
uci = predIQ + 1.96*se) %>%
mutate(model = "Sensitivity") %>%
dplyr::select(-grep("fit", names(.)))
# combine and create CI
sense_all = whole_cc %>%
bind_cols(., pred) %>%
mutate(extreme = ifelse(SID %in% c(1209, 1229), "Yes", "No")) %>%
dplyr::select(WISC, grep("(SEX|P1)", names(.)), extreme) %>%
mutate(predIQ = mean(WISC) + fit.SEX + fit.s.P1..SEXMales + fit.s.P1..SEXFemales,
se= se.fit.SEX + se.fit.s.P1..SEXMales + se.fit.s.P1..SEXFemales,
lci = predIQ - 1.96*se,
uci = predIQ + 1.96*se,
model = "Sensitivity") %>%
dplyr::select(-grep("fit", names(.)))
# Just whole data
sense_all %>%
ggplot(aes(x = P1, group = interaction(SEX, model),fill = interaction(SEX, model))) +
geom_point(aes(y = WISC), alpha=0.25, color="grey") +
geom_point(aes(y = WISC), color="black",
data = subset(sense_all, extreme =="Yes")) +
geom_ribbon(aes(ymin = lci,
ymax = uci),
alpha = 0.5, data = subset(sense_all, SEX == "Males")) +
geom_line(aes(y = predIQ),
data = subset(sense_all, SEX == "Males")) +
geom_ribbon(aes(ymin = lci,
ymax = uci),
alpha = 0.5, data = sense_f) +
geom_line(aes(y = predIQ), data = sense_f) +
facet_grid(.~SEX, scales = "free_x") +
labs(y = "WISC Full Scale IQ", x = "Pattern 1 concentration") +
theme(legend.title = element_blank())
# Main ####
# Flipping gets predicted values for females
main_flip <- lm(WISC ~ P1 + SEX*P1 + SEX + M_IQ + ALCOHOL + M_EDU + M_AGE +
MARITAL_STATUS + HOME_SCORE + mat_hard
, data = mn_flip)
# this gets predicted values for males
main_fit <- lm(WISC ~ P1 + SEX*P1 + SEX + M_IQ + ALCOHOL + M_EDU + M_AGE +
MARITAL_STATUS + HOME_SCORE + mat_hard
, data = mn)
summary(main_fit)
##
## Call:
## lm(formula = WISC ~ P1 + SEX * P1 + SEX + M_IQ + ALCOHOL + M_EDU +
## M_AGE + MARITAL_STATUS + HOME_SCORE + mat_hard, data = mn)
##
## Residuals:
## Min 1Q Median 3Q Max
## -43.586 -7.838 0.460 8.873 27.991
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 101.6730 2.0580 49.404 < 0.0000000000000002 ***
## P1 -0.3633 1.0345 -0.351 0.725725
## SEXFemale 1.3009 2.6183 0.497 0.619698
## M_IQ 3.1176 0.8125 3.837 0.000155 ***
## ALCOHOLYes -5.4499 1.7007 -3.205 0.001512 **
## M_EDU< High school degree -1.2929 1.6541 -0.782 0.435098
## M_AGE 1.0584 0.8452 1.252 0.211543
## MARITAL_STATUSEver Married -0.1459 1.7059 -0.086 0.931924
## HOME_SCORE 2.3393 0.7747 3.020 0.002767 **
## mat_hardYes -2.6158 1.5314 -1.708 0.088747 .
## P1:SEXFemale -3.0822 1.8606 -1.657 0.098749 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12.37 on 276 degrees of freedom
## (54 observations deleted due to missingness)
## Multiple R-squared: 0.1768, Adjusted R-squared: 0.1469
## F-statistic: 5.926 on 10 and 276 DF, p-value: 0.00000004004
summary(main_flip)
##
## Call:
## lm(formula = WISC ~ P1 + SEX * P1 + SEX + M_IQ + ALCOHOL + M_EDU +
## M_AGE + MARITAL_STATUS + HOME_SCORE + mat_hard, data = mn_flip)
##
## Residuals:
## Min 1Q Median 3Q Max
## -43.586 -7.838 0.460 8.873 27.991
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 102.9739 2.3165 44.453 < 0.0000000000000002 ***
## P1 -3.4455 1.5549 -2.216 0.027511 *
## SEXMale -1.3009 2.6183 -0.497 0.619698
## M_IQ 3.1176 0.8125 3.837 0.000155 ***
## ALCOHOLYes -5.4499 1.7007 -3.205 0.001512 **
## M_EDU< High school degree -1.2929 1.6541 -0.782 0.435098
## M_AGE 1.0584 0.8452 1.252 0.211543
## MARITAL_STATUSEver Married -0.1459 1.7059 -0.086 0.931924
## HOME_SCORE 2.3393 0.7747 3.020 0.002767 **
## mat_hardYes -2.6158 1.5314 -1.708 0.088747 .
## P1:SEXMale 3.0822 1.8606 1.657 0.098749 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12.37 on 276 degrees of freedom
## (54 observations deleted due to missingness)
## Multiple R-squared: 0.1768, Adjusted R-squared: 0.1469
## F-statistic: 5.926 on 10 and 276 DF, p-value: 0.00000004004
# Get predicted values
# this is conditional on everything else!
pred_main = as.data.frame(predict(main_fit, se.fit = TRUE, type = c("terms")))
# Get predicted values for females
pred_flip = as.data.frame(predict(main_flip, se.fit = TRUE, type = c("terms")))
# Combine predicted outcomes with data
# And make CI
main =
mn_subset %>%
bind_cols(., pred_main) %>%
bind_cols(., flip.se = (pred_flip$se.fit.P1 + pred_flip$se.fit.P1.SEX)) %>% # just get se for female
dplyr::select(SID, WISC, grep("(SEX|P)", names(.)), flip.se) %>%
mutate(SEX = str_c(SEX, "s"),
predIQ = fit.P1 + mean(WISC) + fit.SEX + fit.P1.SEX, # ifelse(SEX == "Female", predIQf, predIQm),
se.male = se.fit.P1 + se.fit.P1.SEX,
se.female = flip.se,
se = ifelse(SEX == "Females", se.female, se.male),
lci = predIQ - 1.96*se,
uci = predIQ + 1.96*se) %>%
dplyr::select(-grep("fit", names(.))) %>%
mutate(model = "Main")
# Main model fits
main %>%
ggplot(aes(x = P1)) +
geom_point(aes(y = WISC), color = "lightgray", size = 0.5) +
geom_abline(intercept = mean(main$WISC), slope = 0,
color = "darkgray", linetype = "dashed") +
geom_line(aes(y = predIQ)) +
geom_ribbon(aes(ymin = lci, ymax = uci),
alpha = 0.25, linetype = "dotted", size = 0.25) +
facet_grid(.~SEX, scales = "free_x") +
ylim(45, 135) +
theme_minimal(base_size = 15) +
theme(legend.title = element_blank(),
legend.position = "none") +
scale_color_lancet() + scale_fill_lancet() +
labs(y = "WISC full scale IQ", x = "PHT pattern concentration")
# Final plot ####
sense_plot = bind_rows(sense_all, main)
# Figure S1
sense_plot %>%
ggplot(aes(x = P1, group = model, fill = model)) +
geom_point(aes(y = WISC), alpha=0.25, color="grey") +
geom_point(aes(y = WISC), color="black",
data = subset(sense_plot, extreme =="Yes")) +
geom_line(aes(y = predIQ, color = model), data = sense_f) +
geom_ribbon(aes(ymin = lci,
ymax = uci),
alpha = 0.5, data = sense_f) +
geom_ribbon(aes(ymin = lci,
ymax = uci), alpha = 0.5,
data = filter(sense_plot, SEX == "Males" | model == "Main")) +
geom_line(aes(y = predIQ, color = model),
data = subset(sense_plot, SEX == "Males" | model == "Main")) +
facet_grid(.~SEX, scales = "free_x") +
labs(y = "WISC Full Scale IQ", x = "Pattern 1 concentration") +
theme(legend.title = element_blank(),
legend.text = element_text(size = 15)) + scale_fill_nejm() + scale_color_nejm()
model_dat = whole %>%
filter(!is.na(WISC)) %>%
dplyr::select(-c(SID, GEST, WISC_VC, WISC_PR, WISC_PS, WISC_WM, P2))
model_dat %>% names()
## [1] "ETH" "M_EDU" "MARITAL_STATUS" "SMOKER_IN_HOME"
## [5] "SEX" "HOME_SCORE" "ALCOHOL" "M_AGE"
## [9] "M_IQ" "mat_hard" "WISC" "P1"
model_dat %>% ff_glimpse()
## $Continuous
## label var_type n missing_n
## HOME_SCORE HOME_SCORE <dbl> 295 16
## M_AGE M_AGE <dbl> 311 0
## M_IQ Quotient <dbl> 303 8
## WISC WSC_CSFS.84: Full Scale Composite Score <dbl> 311 0
## P1 P1 <dbl> 311 0
## missing_percent mean sd min quartile_25 median quartile_75 max
## HOME_SCORE 5.1 39.3 6.3 8.0 36.0 40.0 44.0 52.0
## M_AGE 0.0 25.5 4.9 18.1 21.2 24.6 29.5 37.9
## M_IQ 2.6 84.9 13.4 60.0 76.0 82.0 92.0 135.0
## WISC 0.0 97.3 13.3 48.0 88.0 99.0 106.0 133.0
## P1 0.0 1.2 1.0 0.2 0.6 0.9 1.4 10.1
##
## $Categorical
## label var_type n missing_n missing_percent levels_n
## ETH ETH <fct> 311 0 0.0 2
## M_EDU M_EDU <fct> 311 0 0.0 2
## MARITAL_STATUS MARITAL_STATUS <fct> 311 0 0.0 2
## SMOKER_IN_HOME SMOKER_IN_HOME <fct> 311 0 0.0 2
## SEX SEX <fct> 311 0 0.0 2
## ALCOHOL ALCOHOL <fct> 311 0 0.0 2
## mat_hard mat_hard <chr> 311 0 0.0 2
## levels
## ETH "African American", "Hispanic/Latina"
## M_EDU "≥ High school degree or equivalent", "< High school degree"
## MARITAL_STATUS "Never Married", "Ever Married"
## SMOKER_IN_HOME "Yes", "No"
## SEX "Male", "Female"
## ALCOHOL "No", "Yes"
## mat_hard -
## levels_count levels_percent
## ETH 107, 204 34, 66
## M_EDU 196, 115 63, 37
## MARITAL_STATUS 209, 102 67, 33
## SMOKER_IN_HOME 94, 217 30, 70
## SEX 166, 145 53, 47
## ALCOHOL 234, 77 75, 25
## mat_hard - -
mice::md.pattern(model_dat, rotate.names = T)
## ETH M_EDU MARITAL_STATUS SMOKER_IN_HOME SEX ALCOHOL M_AGE mat_hard WISC P1
## 289 1 1 1 1 1 1 1 1 1 1
## 14 1 1 1 1 1 1 1 1 1 1
## 6 1 1 1 1 1 1 1 1 1 1
## 2 1 1 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0 0 0
## M_IQ HOME_SCORE
## 289 1 1 0
## 14 1 0 1
## 6 0 1 1
## 2 0 0 2
## 8 16 24
# 289 complete samples
# 14 missing only home score
# 6 missing only maternal iq
# 2 missing both
aggr(model_dat, col=c('navyblue','red'), numbers=TRUE, sortVars=TRUE,
labels=names(model_dat), cex.axis=.7, gap=3, ylab=c("Histogram of missing data","Pattern"))
##
## Variables sorted by number of missings:
## Variable Count
## HOME_SCORE 0.05144695
## M_IQ 0.02572347
## ETH 0.00000000
## M_EDU 0.00000000
## MARITAL_STATUS 0.00000000
## SMOKER_IN_HOME 0.00000000
## SEX 0.00000000
## ALCOHOL 0.00000000
## M_AGE 0.00000000
## mat_hard 0.00000000
## WISC 0.00000000
## P1 0.00000000
marginplot(model_dat[c(6,9)])
explanatory = c("ETH","M_EDU","MARITAL_STATUS","SMOKER_IN_HOME","SEX","HOME_SCORE",
"ALCOHOL","M_AGE","mat_hard","WISC","P1")
model_m = model_dat %>%
mutate(home_miss = as_factor(ifelse(is.na(HOME_SCORE), 1, 0)),
iq_miss = as_factor(ifelse(is.na(M_IQ), 1, 0)))
model_m %>% missing_compare(., dependent = "M_IQ", explanatory)
| Missing data analysis: Quotient | Not missing | Missing | p | |
|---|---|---|---|---|
| ETH | African American | 106 (99.1) | 1 (0.9) | 0.345 |
| Hispanic/Latina | 197 (96.6) | 7 (3.4) | ||
| M_EDU | ≥ High school degree or equivalent | 193 (98.5) | 3 (1.5) | 0.253 |
| < High school degree | 110 (95.7) | 5 (4.3) | ||
| MARITAL_STATUS | Never Married | 203 (97.1) | 6 (2.9) | 0.925 |
| Ever Married | 100 (98.0) | 2 (2.0) | ||
| SMOKER_IN_HOME | Yes | 92 (97.9) | 2 (2.1) | 1.000 |
| No | 211 (97.2) | 6 (2.8) | ||
| SEX | Male | 161 (97.0) | 5 (3.0) | 0.869 |
| Female | 142 (97.9) | 3 (2.1) | ||
| HOME_SCORE | Mean (SD) | 39.4 (6.2) | 34.7 (7.2) | 0.067 |
| ALCOHOL | No | 229 (97.9) | 5 (2.1) | 0.667 |
| Yes | 74 (96.1) | 3 (3.9) | ||
| M_AGE | Mean (SD) | 25.5 (4.9) | 25.2 (4.2) | 0.861 |
| mat_hard | No | 181 (98.9) | 2 (1.1) | 0.108 |
| Yes | 122 (95.3) | 6 (4.7) | ||
| WSC_CSFS.84: Full Scale Composite Score | Mean (SD) | 97.4 (13.3) | 91.5 (11.6) | 0.213 |
| P1 | Mean (SD) | 1.2 (1.0) | 1.1 (0.6) | 0.836 |
explanatory = c("ETH","M_EDU","MARITAL_STATUS","SMOKER_IN_HOME","SEX","M_IQ",
"ALCOHOL","M_AGE","mat_hard","WISC","P1")
model_m %>% missing_compare(., dependent = "HOME_SCORE", explanatory)
| Missing data analysis: HOME_SCORE | Not missing | Missing | p | |
|---|---|---|---|---|
| ETH | African American | 101 (94.4) | 6 (5.6) | 1.000 |
| Hispanic/Latina | 194 (95.1) | 10 (4.9) | ||
| M_EDU | ≥ High school degree or equivalent | 189 (96.4) | 7 (3.6) | 0.170 |
| < High school degree | 106 (92.2) | 9 (7.8) | ||
| MARITAL_STATUS | Never Married | 199 (95.2) | 10 (4.8) | 0.890 |
| Ever Married | 96 (94.1) | 6 (5.9) | ||
| SMOKER_IN_HOME | Yes | 91 (96.8) | 3 (3.2) | 0.455 |
| No | 204 (94.0) | 13 (6.0) | ||
| SEX | Male | 158 (95.2) | 8 (4.8) | 0.983 |
| Female | 137 (94.5) | 8 (5.5) | ||
| Quotient | Mean (SD) | 84.8 (13.5) | 87.4 (12.2) | 0.470 |
| ALCOHOL | No | 220 (94.0) | 14 (6.0) | 0.385 |
| Yes | 75 (97.4) | 2 (2.6) | ||
| M_AGE | Mean (SD) | 25.6 (4.9) | 23.8 (4.9) | 0.142 |
| mat_hard | No | 174 (95.1) | 9 (4.9) | 1.000 |
| Yes | 121 (94.5) | 7 (5.5) | ||
| WSC_CSFS.84: Full Scale Composite Score | Mean (SD) | 97.2 (13.4) | 99.1 (11.3) | 0.579 |
| P1 | Mean (SD) | 1.2 (1.1) | 1.1 (0.6) | 0.521 |